package com.information.manage.model.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.information.manage.common.constants.HandleFileTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

@Data
@TableName("add_file")
@ApiModel(value="检测到添加的文件", description="")
public class AddFileDO implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @ApiModelProperty("父数据id")   // 存在一个文件解析出多个数据，该只保留第一个数据，其它的作为子数据
    private Long parentId;

    @ApiModelProperty("添加的文件夹名称")
    private String fileName;

    @ApiModelProperty("添加的文件夹路径")
    private String filePath;

    /**
     * @see com.information.manage.common.constants.HandleFileTypeEnum
     */
    @ApiModelProperty("处理类型 1上传 / 2自动监听文件夹 /3手动添加记录")
    private Integer type;

    @ApiModelProperty("操作人Id：即由谁上传, 如果type为自动监听该值默认0")
    private Long operator;

    /**
     * @see com.information.manage.common.constants.ListenTypeEnum
     */
    @ApiModelProperty("监听的文件类型")
    private Integer listenFileTypeCode;

    @ApiModelProperty("监听类型 创建（ENTRY_CREATE）、修改（ENTRY_MODIFY）、删除（ENTRY_DELETE），  如果type为上传的默认就是创建")
    private String kindName;

    @ApiModelProperty("监听到的时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date listenTime;

    @ApiModelProperty("记录创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * @see com.information.manage.common.constants.AddFileStatusEnum
     */
    @ApiModelProperty("任务状态 1检测到后未处理  2处理已完成")
    private Integer status;

    @ApiModelProperty("任务处理结果")
    private String result;

    @ApiModelProperty("分析文件结果的id")
    private Long analysisFileId;

    @ApiModelProperty("记录修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    public String getRealFileName(){
        if (type != null && HandleFileTypeEnum.UPLOAD.getCode() == type){
            return recursionStr(fileName, 2);
        }
        return fileName;
    }

    /**
     * @param str  当前str
     * @param maxCount  最大递归次数， 目前路径后最多两个_ 所以该值先设定2
     * @return
     */
    private String recursionStr(String str, Integer maxCount){
        if (str.contains("_")){
            String tmp = str.substring(0, str.lastIndexOf("_"));
            if (maxCount > 1){
                return recursionStr(tmp, maxCount);
            }else {
                return tmp;
            }
        }else {
            return str;
        }
    }

}
